package com.bnz.user.service.impl;

import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bnz.user.dao.UserMapper;
import com.bnz.user.entity.User;
import com.bnz.user.service.UserService;
import org.apache.commons.lang.StringUtils;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private RabbitTemplate rabbitTemplate;
    // 1. 获取手机验证码
    @Override
    public void sendCode(String phone) {
        // 1.1 随机生成一个四位数的验证码
        String code = RandomUtil.randomNumbers(4);
        // 1.2 将这个验证码放到redis中
        redisTemplate.opsForValue().set(phone,code,10, TimeUnit.DAYS);
        // 1.3 通过rabbitmq发送信息，由监听方得到信息并且再向阿里云发送消息
        // 1.3.1 先定义一个Map
        Map<String,String> map = new HashMap<>();
        // 1.3.2 将电话号码和验证码放到map中
        map.put("phone",phone);
        map.put("code",code);
        rabbitTemplate.convertAndSend("code",map);
    }

    // 2. 验证手机验证码是否正确
    @Override
    public boolean isValidCode(String phone, String code) {
        // 2.1 先从redis中得到验证码
        String s = redisTemplate.opsForValue().get(phone);
        // 2.2 判断用户输入的验证码是否正确
        if (StringUtils.isNotBlank(s)){
            if (s.equals(code)){
                return true;
            }
        }
        return false;
    }
}
